package lanqiao._02算法训练.page03;

import java.util.Scanner;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec
 * 问题描述
 * 　　给定一个n长的数列，有m次操作，第i次操作表示将整个数列循环移动mi位，询问每次操作结束后的开头k个数字
 * 输入格式
 * 　　第一行三个整数n,m,k。
 * 　　第二行n个整数表示数列。
 * 　　接下来m行，每行一个整数mi，表示移动位数，若mi为正，表示向左移mi位，若mi为负数，表示向右移-mi位。
 * 输出格式
 * 　　m行，每行k个数，表示开头k个数字
 * 样例输入
 * 5 2 3
 * 1 2 3 4 5
 * 2
 * -2
 * 样例输出
 * 3 4 5
 * 1 2 3
 * 数据规模和约定
 * 　　n<=1000000
 * 　　m<=100000
 * 　　k<=min(10,n)
 * 　　mi<=100000000
 * 思路：
 * 只需要找开头的k个数
 * 可以不移动数组，用一个变量cur记录每次操作后开头数在数组中的索引,读k个数
 * mi % n 为有效移动位数
 * 左移 cur = (cur+mi)%n
 * 右移 cur = (cur+mi)%n  -- 注意cur+mi为负的情况
 * @since 2022 - 12 - 23 - 22:15
 */
public class _24移动 {
}
class Main_24{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt(), k = sc.nextInt();
        int[] nums = new int[n];
        for(int i = 0; i < n; i++){
            nums[i] = sc.nextInt();
        }
        //保持数组不移动，nums[cur]是每次操作后的开头
        int cur = 0;
        int mi;
        for(int i = 0; i < m; i++){
            mi = sc.nextInt();
            mi = mi % n;    //mi可能大于n, 整除n 的移动位无效
            if(mi > 0){ //循环左移数组，cur相对右移
                cur = (cur + mi) % n;
            }else if(mi < 0){ //循环右移数组，cur相对左移
                if(cur + mi < 0){   //判断 出现负数的情况
                    cur = (cur + n + mi) % n;
                }else{
                    cur = (cur + mi) % n;
                }
            }
            //从cur开始，循环读k个数
            for(int j = 0; j < k; j++){
                System.out.print(nums[(cur + j) % n] + " ");
            }
            System.out.println();
        }
    }
}